<?php
/**
 * Created by PhpStorm.
 * User: 269995848@qq.com
 * Date: 2018/8/20
 * Time: 14:16
 */

namespace app\lib\validate;

use app\lib\exception\ParameterException;
use think\Request;
use think\Validate;

/**
 * Class BaseValidate
 * 验证类的基类
 */
class BaseValidate extends Validate
{
    /**
     * 检测所有客户端发来的参数是否符合验证类规则
     * 基类定义了很多自定义验证方法
     * 这些自定义验证方法其实，也可以直接调用
     * @throws ParameterException
     * @return true
     */
    public function goCheck()
    {
        //必须设置contetn-type:application/json
        $request = \think\facade\Request::instance();
        $params = $request->param();
        // $params['token'] = $request->header('token');

        if (!$this->check($params)) {
            $exception = new ParameterException(
                [
                    // $this->error有一个问题，并不是一定返回数组，需要判断
                    'msg' => is_array($this->error) ? implode(
                        ';', $this->error) : $this->error,
                ]);
            throw $exception;
        }
        return true;
    }

    /**
     * @param array $arrays 通常传入request.post变量数组
     * @return array 按照规则key过滤后的变量数组
     * @throws ParameterException
     */
    public function getDataByRule($arrays){
        if(array_key_exists('id',$arrays) | array_key_exists('members_id',$arrays)){
            throw new ParameterException(['msg'=>'参数中包含有非法的参数名']);
        }
        $newArray=[];
        foreach($this->rule as $k=>$v){
            if(!isset($arrays[$k])) continue;
            $newArray[$k]=$arrays[$k];
        }

        return $newArray;
    }

    protected function isPositiveInteger($value, $rule='', $data='', $field='',$chooses=false)
    {

        if ($value && is_numeric($value) && is_int($value + 0) && ($value + 0) > 0) {
            return true;
        }

        if($chooses==true){
            return false;
        }

        return $field . '必须是正整数并且大于0';
    }

    protected function allowZero($value, $rule='', $data='', $field=''){
        if (is_numeric($value) && is_int($value + 0)) {
            return true;
        }
        return $field . '必须是正整数';
    }

    protected function isNotEmpty($value, $rule='', $data='', $field='')
    {

        if (empty($value)) {
            return $field . '不允许为空';
        } else {
            return true;
        }
    }




    //没有使用TP的正则验证，集中在一处方便以后修改
    //不推荐使用正则，因为复用性太差
    //手机号的验证规则
    protected function isMobile($value)
    {
        $rule = '^1(3|4|5|7|8)[0-9]\d{8}$^';
        $result = preg_match($rule, $value);
        if ($result) {
            return true;
        } else {
            return false;
        }
    }





}